package com.lynch.dao;

import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * 数据存储之一文件存储
 * 
 * @author yjc
 */
public class SharedPreferencesHelper {

	private static final String PREFS_NAME = "Constants";
	private static SharedPreferences sharedPreferences;
	private static SharedPreferences.Editor editor;
	private static SharedPreferencesHelper sharedPreferencesHelper;
	
	/**
	 * 通过Context来访问这个文件(构造方法)
	 * 
	 * @param context context 对象
	 * @return sharedPreferencesHelper 存储对象
	 */
	public SharedPreferencesHelper(Context context) {
		
		sharedPreferences = context.getSharedPreferences(PREFS_NAME, 0);
		editor = sharedPreferences.edit();
	}

	/**
	 * 通过Context方式来获得一个对象
	 * 
	 * @param context context 对象
	 * @return sharedPreferencesHelper 存储对象
	 */
	public static SharedPreferencesHelper newInstanceByContext(Context context){
		
		if(sharedPreferencesHelper == null){
			sharedPreferencesHelper = new SharedPreferencesHelper(context);
		}
		return sharedPreferencesHelper;
	}
	
	
	/**
	 * 是否包含此键值
	 * @param key 设置的key
	 * @return 如果存在返回true，如果不存在返回false
	 */
	public boolean contains(String key){
		
		return sharedPreferences.contains(key);
	}
	
	/**
	 * 返回此文件中所有的键值对
	 * @return map 
	 */
	public Map<String, ?> getAll(){
		
		return sharedPreferences.getAll();
	}
	
	/**
	 * 布尔值获取方法(如果没有取到，返回defValue值)
	 * @param key 取值的key
	 * @param defValue 默认值
	 * @return 如果没有取得，返回默认值
	 */
	public boolean getBoolean(String key, boolean defValue){
		
		return sharedPreferences.getBoolean(key, defValue);
	}

	/**
	 * 浮点值获取方法(如果没有取到，返回defValue值)
	 * @param key 取值的key
	 * @param defValue 默认值
	 * @return 如果没有取得，返回默认值
	 */
	public float getFloat(String key, float defValue){
		
		return sharedPreferences.getFloat(key, defValue);
	}
	
	/**
	 * 整型值获取方法(如果没有取到，返回defValue值)
	 * @param key 取值的key
	 * @param defValue 默认值
	 * @return 如果没有取得，返回默认值
	 */
	public int getInt(String key, int defValue){
		
		return sharedPreferences.getInt(key, defValue);
	}

	/**
	 * 长整型值获取方法(如果没有取到，返回defValue值)
	 * @param key 取值的key
	 * @param defValue 默认值
	 * @return 如果没有取得，返回默认值
	 */
	public long getLong(String key, long defValue){
		
		return sharedPreferences.getLong(key, defValue);
	}

	/**
	 * 字符串获取方法(如果没有取到，返回defValue值)
	 * @param key 取值的key
	 * @param defValue 默认值
	 * @return 如果没有取得，返回默认值
	 */
	public String getString(String key, String defValue){
		
		return sharedPreferences.getString(key, defValue);
	}
	
	
	/**
	 * 布尔值设值方法
	 * @param key 设置的key
	 * @param value 设置的值
	 */
	public void putBoolean(String key, boolean value){
		
		editor.putBoolean(key, value);
		editor.commit();
	}
	
	/**
	 * 浮点值设值方法
	 * @param key 设置的key
	 * @param value 设置的值
	 */
	public void putFloat(String key, float value){
		
		editor.putFloat(key, value);
		editor.commit();
	}
	
	/**
	 * 整型设值方法
	 * @param key 设置的key
	 * @param value 设置的值
	 */
	public void putInt(String key, int value){
		
		editor.putInt(key, value);
		editor.commit();
	}
	
	/**
	 * 长整型设值方法
	 * @param key 设置的key
	 * @param value 设置的值
	 */
	public void putLong(String key, long value){
		
		editor.putLong(key, value);
		editor.commit();
	}

	/**
	 * 字符串设值方法
	 * @param key 设置的key
	 * @param value 设置的值
	 */
	public void putString(String key, String value){
		
		editor.putString(key, value);
		editor.commit();
	}
	
	/**
	 * 清空所有键值对
	 */
	public void clear(){
		
		editor.clear();
		editor.commit();
	}
	
	/**
	 * 移除某一键值对
	 * @param key 设置的key
	 */
	public void remove(String key){
		
		editor.remove(key);
		editor.commit();
	}
	
}